An OpenGL rendering context (or GLXContext) is logically an instance of an OpenGL state machine. When a context is created using glXCreateContext, the creator has the option of requesting a direct rendering context. If the program is running locally and the OpenGL implementation supports direct rendering, a direct rendering context will be created. Everything that can be done with a direct context can be done with an indirect context (the reverse is not true) so requesting a direct context but being returned an indirect context is acceptable.
Once a context is created, that context can be bound or ``made current'' to a drawable (either a window or pixmap) supporting OpenGL rendering by calling glXMakeCurrent. Not only is the context bound to the drawable, but also to the thread calling glXMakeCurrent. Once bound, any OpenGL calls issued by the thread are issued using the current context and affect the current drawable. Only one thread can be bound to a given context at a time; but multiple contexts (bound to different threads) can be bound to a single drawable. Subsequent calls to glXMakeCurrent rebind the thread to the newly specified drawable and context.